"""
类名：LoginApi
实例属性：
login_url：保存登陆的url，"http://ihrm-test.itheima.net/api/sys/login"
实例方法：
    def login(self, body)：
        # 功能：发送登陆请求
        # :param body: 发送请求的请求体
        # :return: 发送登陆请求后的响应对象
"""

# 1. 导包
import unittest
import requests


class LoginApi:
    def __init__(self):
        # 实例属性，登陆网址
        self.login_url = "http://ihrm-test.itheima.net/api/sys/login"

    def login(self, body):
        """
        功能：发送登陆请求
        :param body: 发送请求的请求体
        :return: 发送登陆请求后的响应对象
        """
        resp = requests.post(self.login_url, json=body)
        return resp


# 2. 自定义测试类
# 注意: 必须继承自 unittest.TestCase
class TestLogin(unittest.TestCase):
    """测试类"""

    # 3. 自定义测试方法
    # 注意: 必须以 test 开头(字母必须全小写, 别拼错单词, 例如: text)
    # 登录成功
    def test01_login_success(self):
        # 测试数据
        body = {
            "mobile": "13800000002",
            "password": "123456"
        }
        # 发送请求
        # 实例化对象
        login_api = LoginApi()
        # 实例对象调用实例方法，获取响应对象
        response = login_api.login(body)
        # 断言
        json_data = response.json()
        print("json_data =", json_data)
        self.assertEqual(200, response.status_code)
        self.assertEqual(True, json_data.get("success"))
        self.assertEqual(10000, json_data.get("code"))
        self.assertIn("操作成功", json_data.get("message"))

    def test02_user_err(self):
        # 测试数据
        body = {
            "mobile": "13800003442",
            "password": "123456"
        }
        # 发送请求
        # 实例化对象
        login_api = LoginApi()
        # 实例对象调用实例方法，获取响应对象
        response = login_api.login(body)
        # 断言
        json_data = response.json()
        print("json_data =", json_data)
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, json_data.get("success"))
        self.assertEqual(20001, json_data.get("code"))
        self.assertIn("用户名或密码错误", json_data.get("message"))

    def test03_pwd_err(self):
        # 测试数据
        body = {
            "mobile": "13800000002",
            "password": "123abc"
        }
        # 发送请求
        # 实例化对象
        login_api = LoginApi()
        # 实例对象调用实例方法，获取响应对象
        response = login_api.login(body)

        # 断言
        json_data = response.json()
        print("json_data =", json_data)
        self.assertEqual(200, response.status_code)
        self.assertEqual(False, json_data.get("success"))
        self.assertEqual(20001, json_data.get("code"))
        self.assertIn("用户名或密码错误", json_data.get("message"))
